StepFunctions を用いて Lambda 関数を実行する際、実行する Lambda 関数を動的に指定する方法
困っていること
Lambda 関数を呼び出す StepFunctions を作成しました。
呼び出す Lambda 関数はパラメータとして入力された関数名を利用し動的に指定したいです。
どのように実装すればいいでしょうか?
どう対応すればいいの?
Parameters フィールドに関数 ARN を指定する方法で実装ください。
StepFunctions から Lambda 関数を呼び出す際の定義方法は以下の2通りがございます。
- 直接 Resource フィールドに関数 ARN を記載する
- Parameters フィールド内で FunctionName パラメータを定義しその中で関数 ARN を記載する
または、「リソース」フィールドで関数ARNを直接指定して Lambda 関数を呼び出すこともできます。
実行時に入力されるパラメータはコンテキストオブジェクト内に格納が行われますが、Resource フィールドからコンテキストオブジェクトを参照することはできません。
一方で、Parameters フィールドからの参照は可能なため、動的に関数名を指定したい場合 Parameters フィールドに関数 ARN を指定する方法で実装ください。
コンテキストオブジェクトには、次のフィールドからアクセスできます。
- InputPath
- OutputPath
- ItemsPath (マップ状態)
- Variable (選択状態)
- ResultSelector
- Parameters
- 変数と変数の比較演算子
やってみた
それでは実際にやってみます。
今回利用する StepFunctions 定義は以下の通りです。
{
"StartAt": "Test",
"States": {
"Test": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName.$": "States.Format('arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:{}', $.Name)"
},
"End": true
}
}
}
事前に以下の二種類の Lambda 関数を作成しています。
それでは早速実行していきます。
最初の実行では以下の入力で実行を行います。
{
"Name": "test-sf-1"
}
エラーなく実行完了し、また入力値で指定した関数が実行されていることがわかります。
続いて以下の入力でも実行を行います。
{
"Name": "test-sf-2"
}
同様にエラーなく実行が行われ、呼び出される関数が入力値により変わっていることが確認できました。
動的に実行する Lambda 関数を指定されたい場合はぜひこちらの方法をご利用ください。